package ginx

import (
	"gitee.com/DonHz/basic-go/webook/pkg/logger"
	"github.com/gin-gonic/gin"
	"net/http"
)

func WrapBody[T any](l logger.Logger, fn func(ctx *gin.Context, req T) (Result, error)) gin.HandlerFunc {
	return func(ctx *gin.Context) {
		var req T
		if err:=ctx.Bind(&req); err!=nil{
			return
		}
		res, err:=fn(ctx, req)
		if err!=nil{
			// 记录日志
			l.Error("处理业务逻辑出错",
				logger.String("path", ctx.Request.URL.Path),
				logger.String("route", ctx.FullPath()),
				logger.Error(err))
		}
		ctx.JSON(http.StatusOK, res)
	}
}

type Result struct {
	// 业务错误码
	Code int	`json:"code"`
	Msg string	`json:"msg"`
	Data any	`json:"data"`
	Count int64 `json:"count"`
}